//package com.vteba.test.pdf;
//
//import java.io.File;
//import java.io.FileInputStream;
//import java.io.FileNotFoundException;
//import java.io.FileOutputStream;
//import java.io.IOException;
//import java.io.OutputStream;
//import java.net.ConnectException;
//
//import org.apache.commons.io.IOUtils;
//import org.apache.logging.log4j.util.PropertiesUtil;
//import org.artofsolving.jodconverter.OfficeDocumentConverter;
//import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration;
//import org.artofsolving.jodconverter.office.OfficeManager;
//import org.docx4j.convert.out.pdf.PdfConversion;
//import org.docx4j.convert.out.pdf.viaXSLFO.PdfSettings;
//import org.docx4j.fonts.IdentityPlusMapper;
//import org.docx4j.fonts.Mapper;
//import org.docx4j.fonts.PhysicalFonts;
//import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
//
//import com.artofsolving.jodconverter.DocumentConverter;
//import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
//import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;
//import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;
//import com.itextpdf.text.Document;
//import com.itextpdf.text.DocumentException;
//import com.itextpdf.text.Paragraph;
//import com.itextpdf.text.pdf.PdfWriter;
//import com.itextpdf.tool.xml.XMLWorkerHelper;
//
///**
// * 这是一个工具类，主要是为了使Office2003-2007全部格式的文档
// * (.doc|.docx|.xls|.xlsx|.ppt|.pptx)转化为pdf文件
// */
//public class OfficeToPdf {
//
//	public static final String OFFICE_DOC = "doc";
//	public static final String OFFICE_DOCX = "docx";
//	public static final String OFFICE_XLS = "xls";
//	public static final String OFFICE_XLSX = "xlsx";
//	public static final String OFFICE_PPT = "ppt";
//	public static final String OFFICE_PPTX = "pptx";
//	public static final String OFFICE_TO_PDF = "pdf";
//
//	/**
//	 * 使Office2003-2007全部格式的文档(.doc|.docx|.xls|.xlsx|.ppt|.pptx) 转化为pdf文件<br>
//	 * 
//	 * @param inputFilePath
//	 *            源文件路径，如："e:/test.docx"
//	 * @param outputFilePath
//	 *            目标文件路径，如："e:/test_docx.pdf"
//	 * @return
//	 */
//	public static boolean openOfficeToPDF(String inputFilePath, String outputFilePath) {
//		return office2pdf(inputFilePath, outputFilePath);
//	}
//
//	/**
//	 * 获取OpenOffice.org 3的安装目录
//	 * 
//	 * @return OpenOffice.org 3的安装目录
//	 */
//	public static String getOfficeHome() {
////		String path = PropertiesUtil.getValueByPropertyName(
////				ClassLoader.getSystemResourceAsStream("toPdf.properties"),
////				"OPENOFFICE_PATH");
//		return "C:\\Program Files (x86)\\OpenOffice 4\\";
//	}
//
//	/**
//	 * 连接OpenOffice.org 并且启动OpenOffice.org
//	 * 
//	 * @return
//	 */
//	public static OfficeManager getOfficeManager() {
//		DefaultOfficeManagerConfiguration config = new DefaultOfficeManagerConfiguration();
//		// 获取OpenOffice.org 3的安装目录
//		String officeHome = getOfficeHome();
//		config.setOfficeHome(officeHome);
//		// 启动OpenOffice的服务
//		OfficeManager officeManager = config.buildOfficeManager();
//		
//		officeManager.start();
//		return officeManager;
//	}
//
//	/**
//	 * 转换文件
//	 * 
//	 * @param inputFile
//	 * @param outputFilePath_end
//	 * @param inputFilePath
//	 * @param outputFilePath
//	 * @param converter
//	 */
//	public static void converterFile(File inputFile, String outputFilePath_end,
//			String inputFilePath, String outputFilePath,
//			OfficeDocumentConverter converter) {
//		File outputFile = new File(outputFilePath_end);
//		// 假如目标路径不存在,则新建该路径
//		if (!outputFile.getParentFile().exists()) {
//			outputFile.getParentFile().mkdirs();
//		}
//		converter.convert(inputFile, outputFile);
//	}
//
//	/**
//	 * 使Office2003-2007全部格式的文档(.doc|.docx|.xls|.xlsx|.ppt|.pptx) 转化为pdf文件
//	 * 
//	 * @param inputFilePath
//	 *            源文件路径，如："e:/test.docx"
//	 * @param outputFilePath
//	 *            目标文件路径，如："e:/test_docx.pdf"
//	 * @return
//	 */
//	public static boolean office2pdf(String inputFilePath, String outputFilePath) {
//		boolean flag = false;
//		OfficeManager officeManager = getOfficeManager();
//		// 连接OpenOffice
//		OfficeDocumentConverter converter = new OfficeDocumentConverter(
//				officeManager);
//		if (null != inputFilePath) {
//			File inputFile = new File(inputFilePath);
//			// 判断目标文件路径是否为空
//			if (null == outputFilePath) {
//				// 转换后的文件路径
//				String outputFilePath_end = getOutputFilePath(inputFilePath);
//				if (inputFile.exists()) {// 找不到源文件, 则返回
//					converterFile(inputFile, outputFilePath_end, inputFilePath,
//							outputFilePath, converter);
//					flag = true;
//				}
//			} else {
//				if (inputFile.exists()) {// 找不到源文件, 则返回
//					converterFile(inputFile, outputFilePath, inputFilePath,
//							outputFilePath, converter);
//					flag = true;
//				}
//			}
//			officeManager.stop();
//		} else {
//			flag = false;
//		}
//		return flag;
//	}
//
//	/**
//	 * 获取输出文件
//	 * 
//	 * @param inputFilePath
//	 * @return
//	 */
//	public static String getOutputFilePath(String inputFilePath) {
//		String outputFilePath = inputFilePath.replaceAll("."
//				+ getPostfix(inputFilePath), ".pdf");
//		return outputFilePath;
//	}
//
//	/**
//	 * 获取inputFilePath的后缀名，如："e:/test.pptx"的后缀名为："pptx"
//	 * 
//	 * @param inputFilePath
//	 * @return
//	 */
//	public static String getPostfix(String inputFilePath) {
//		return inputFilePath.substring(inputFilePath.lastIndexOf(".") + 1);
//	}
//
//	/**
//	 * 将Office文档转换为PDF. 运行该函数需要用到OpenOffice, OpenOffice下载地址为
//	 * http://www.openoffice.org/
//	 * 
//	 * <pre>
//	 * 方法示例:
//	 * String sourcePath = "F:\\office\\source.doc";
//	 * String destFile = "F:\\pdf\\dest.pdf";
//	 * Converter.office2PDF(sourcePath, destFile);
//	 * </pre>
//	 * 
//	 * @param sourceFile
//	 *            源文件, 绝对路径. 可以是Office2003-2007全部格式的文档, Office2010的没测试. 包括.doc,
//	 *            .docx, .xls, .xlsx, .ppt, .pptx等. 示例: F:\\office\\source.doc
//	 * @param destFile
//	 *            目标文件. 绝对路径. 示例: F:\\pdf\\dest.pdf
//	 * @return 操作成功与否的提示信息. 如果返回 -1, 表示找不到源文件, 或url.properties配置错误; 如果返回 0,
//	 *         则表示操作成功; 返回1, 则表示转换失败
//	 */
//	public static int office2PDF(String sourceFile, String destFile) {
//		try {
//			File inputFile = new File(sourceFile);
//			if (!inputFile.exists()) {
//				return -1;// 找不到源文件, 则返回-1
//			}
//
//			// 如果目标路径不存在, 则新建该路径
//			File outputFile = new File(destFile);
//			if (!outputFile.getParentFile().exists()) {
//				outputFile.getParentFile().mkdirs();
//			}
//
//			String OpenOffice_HOME = "C:\\Program Files (x86)\\OpenOffice 4";//这里是OpenOffice的安装目录, 在我的项目中,为了便于拓展接口,没有直接写成这个样子,但是这样是绝对没问题的
//			// 如果从文件中读取的URL地址最后一个字符不是 '\'，则添加'\'
//			if (OpenOffice_HOME.charAt(OpenOffice_HOME.length() - 1) != '\\') {
//				OpenOffice_HOME += "\\";
//			}
//			// 启动OpenOffice的服务
//			String command = OpenOffice_HOME
//					+ "program\\soffice.exe -headless -accept=\"socket,host=127.0.0.1,port=8100;urp;\"";
//			Process pro = Runtime.getRuntime().exec(command);
//			// connect to an OpenOffice.org instance running on port 8100
//			OpenOfficeConnection connection = new SocketOpenOfficeConnection(
//					"127.0.0.1", 8100);
//			connection.connect();
//
//			// convert
//			DocumentConverter converter = new OpenOfficeDocumentConverter(
//					connection);
//			
//			converter.convert(inputFile, outputFile);
//			//DocumentFormat documentFormat = new DocumentFormat("docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "docx");
//			
//			//DocumentFormatRegistry registry = new DefaultDocumentFormatRegistry();
//			
//			
//			// close the connection
//			connection.disconnect();
//			// 关闭OpenOffice服务的进程
//			pro.destroy();
//
//			return 0;
//		} catch (FileNotFoundException e) {
//			e.printStackTrace();
//			return -1;
//		} catch (ConnectException e) {
//			e.printStackTrace();
//		} catch (IOException e) {
//			e.printStackTrace();
//		}
//
//		return 1;
//	}
//	
//	/**
//	 * docx文档转换为PDF
//	 * @param docx docx文档
//	 * @param pdfPath PDF文档存储路径
//	 * @throws Exception 可能为Docx4JException, FileNotFoundException, IOException等
//	 */
//	public static void convertDocxToPDF(File docx, String pdfPath) throws Exception {
//		OutputStream os = null;
//		try {
//			WordprocessingMLPackage mlPackage = WordprocessingMLPackage.load(docx);
////				Mapper fontMapper = new BestMatchingMapper();
//			Mapper fontMapper = new IdentityPlusMapper();
//			
//			fontMapper.getFontMappings().put("华文行楷", PhysicalFonts.getPhysicalFonts().get("STXingkai"));
//			fontMapper.getFontMappings().put("华文仿宋", PhysicalFonts.getPhysicalFonts().get("STFangsong"));
//			fontMapper.getFontMappings().put("隶书", PhysicalFonts.getPhysicalFonts().get("LiSu"));
//			mlPackage.setFontMapper(fontMapper);
//
//			PdfConversion conversion = new org.docx4j.convert.out.pdf.viaXSLFO.Conversion(mlPackage);
//			os = new FileOutputStream(pdfPath);
//			
//			conversion.output(os, new PdfSettings());
//		} finally {
//			IOUtils.closeQuietly(os);
//		}
//	}
//	
//	public static void main(String[] aa) {
//		//File docx = new File("c:/tools/bb.docx");
//		try {
//			//convertDocxToPDF(docx, "c:/tools/ddeeff2.pdf");
//			
//			//generatePdfByHtml("c:/tools/ccbb.pdf", "");
//			
//			//office2PDF("c:/tools/drht.doc", "c:/tools/ddeeff433.pdf");
//			
//			office2pdf("c:/tools/drht.docx", "c:/tools/ddeeff38.pdf");
//		} catch (Exception e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
//	}
//	
//	public static boolean generatePdfByHtml(String targetFilePath, String htmlStr) {
//        boolean isSuccsee = false;
//        OutputStream os;
//        try {
//            os = new FileOutputStream(targetFilePath);
//            Document doc = new Document();
//            //中文字符设置
//            //BaseFont baseFontChinese = BaseFont.createFont("STSong-Light","UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
//            //Font fontChinese = new Font(baseFontChinese, 12, Font.NORMAL);
//            //创建监听器
//            PdfWriter writer = PdfWriter.getInstance(doc, os);
////            if (isSetVersion) {
////                //加权限 
////                writer.setPdfVersion(writer.PDF_VERSION_1_7);
////                int perssion = writer.ALLOW_PRINTING | writer.HideMenubar
////                        | writer.HideToolbar | writer.HideWindowUI | writer.ALLOW_FILL_IN;
////                writer.setEncryption(null, null, perssion,writer.STANDARD_ENCRYPTION_40);
////            }
//            Paragraph context = new Paragraph();
//            context.add(htmlStr);
//            
//            FileInputStream fis = new FileInputStream("c:/tools/bb.docx");
//            
//            doc.setPageCount(1);
//            
//            doc.open();
//            XMLWorkerHelper.getInstance().parseXHtml(writer, doc, fis);
//            
//            //doc.add(context);
//            doc.close();
//            isSuccsee = true;
//            os.flush();
//            os.close();
//        } catch (DocumentException e1) {
//            e1.printStackTrace();
//        } catch (IOException e1) {
//            e1.printStackTrace();
//        }
//        return isSuccsee;
//    }
//}